﻿#define _CRT_SECURE_NO_WARNINGS 1
//int main()
//{
//	int i = 0;
//	const double& d = i;
//	return 0;
//}

#include<string>
#include<iostream>
using namespace std;
//class Person
//{
//public:
//	string _name = "张三";
//protected:
//	int _age = 20;
//};
//
//class Student : public Person
//{
//public:
//	int _stuID = 1001;
//};
//int main() {
//	Student s;
//	cout << s._name << " " << s._age << " " << s._stuID << endl;
//}
//class Person 
//{
//public:
//    string _name = "张三";
//};
//
//class Student : public Person 
//{
//public:
//    int _stuID = 123;
//};
//
//int main() {
//    Student s;
//    Person p = s; // 对象切片
//    cout << p._name << endl;
//    //cout << p._stuID << endl; // 报错
//								//把子类对象赋值给父类对象时，会**“切掉”子类部分**。
//								//所以 p 只保留了 Person 的成员。
//								//若是指针或引用，则不会切割：
//
//    Person& rp = s;      // 保留子类信息
//    //cout << rp._stuID << endl;
//
//    Person* ptrp = &s;
//}


//class Person 
//{
//public:
//    void fun() { cout << "Person" << endl; }
//};
//
//class Student : public Person 
//{
//public:
//    void fun(int i) 
//    { 
//       cout << "Student" << endl;
//    }  // 与父类 void fun() 无关
//    //void fun() { 
//    // cout << "Student" << endl; 
//    // }
//};


#include <iostream>
using namespace std;

//class A 
//{
//public:
//    A() { cout << "A()" << endl; }
//    ~A() { cout << "~A()" << endl; }
//};
//
//class B : public A 
//{
//public:
//    B() { cout << "B()" << endl; }
//    ~B() { cout << "~B()" << endl; }
//};
//
//class C : public B 
//{
//public:
//    C() { cout << "C()" << endl; }
//    ~C() { cout << "~C()" << endl; }
//};
//
//int main() {
//    C obj;
//    return 0;
//}


#include <iostream>
using namespace std;
//
//class A 
//{
//public:
//    A() { cout << "A()" << endl; }
//    ~A() { cout << "~A()" << endl; }
//};
//
//class B : virtual public A 
//{
//public:
//    B() { cout << "B()" << endl; }
//    ~B() { cout << "~B()" << endl; }
//};
//
//class C : virtual public A 
//{
//public:
//    C() { cout << "C()" << endl; }
//    ~C() { cout << "~C()" << endl; }
//};
//
//class D : public B, public C 
//{
//public:
//    D() { cout << "D()" << endl; }
//    ~D() { cout << "~D()" << endl; }
//};
//
//int main() {
//    D d;
//    return 0;
//}


class A {
public:
    A() { cout << "A()" << endl; } // ✅ 默认构造
    A(int x) { cout << "A(" << x << ")" << endl; }
};


class B : virtual public A {
public:
    B() { cout << "B()" << endl; }
};

class C : virtual public A {
public:
    C() { cout << "C()" << endl; }
};

class D : public B, public C {
public:
    D() : A(100), B(), C() {
        cout << "D()" << endl;
    }
};
